import { couponApi } from '@/api/index.js'

const state = {
  // 优惠券列表
  couponList: [],
  // 可用优惠券列表（用于下单时选择）
  availableCoupons: [],
  // 当前选中的优惠券
  selectedCoupon: null,
  // 优惠券加载状态
  loading: false
}

const getters = {
  // 获取优惠券列表
  getCouponList: state => state.couponList,
  // 获取可用优惠券列表
  getAvailableCoupons: state => state.availableCoupons,
  // 获取当前选中的优惠券
  getSelectedCoupon: state => state.selectedCoupon,
  // 获取优惠券加载状态
  getCouponLoading: state => state.loading,
  // 获取可用优惠券总金额
  getAvailableCouponAmount: state => {
    if (!state.selectedCoupon) return 0
    return state.selectedCoupon.amount || 0
  }
}

const mutations = {
  // 设置优惠券列表
  SET_COUPON_LIST(state, couponList) {
    state.couponList = couponList
  },
  
  // 设置可用优惠券列表
  SET_AVAILABLE_COUPONS(state, coupons) {
    state.availableCoupons = coupons
  },
  
  // 设置选中的优惠券
  SET_SELECTED_COUPON(state, coupon) {
    state.selectedCoupon = coupon
  },
  
  // 设置加载状态
  SET_COUPON_LOADING(state, loading) {
    state.loading = loading
  },
  
  // 清除选中的优惠券
  CLEAR_SELECTED_COUPON(state) {
    state.selectedCoupon = null
  }
}

const actions = {
  // 获取优惠券列表
  async fetchCouponList({ commit }, params = {}) {
    commit('SET_COUPON_LOADING', true)
    try {
      const res = await couponApi.getCouponList(params)
      if (res.success || res.code === 200) {
        commit('SET_COUPON_LIST', res.data.records || [])
        return { success: true, data: res.data }
      } else {
        throw new Error(res.message || '获取优惠券列表失败')
      }
    } catch (error) {
      console.error('获取优惠券列表失败:', error)
      throw error
    } finally {
      commit('SET_COUPON_LOADING', false)
    }
  },
  
  // 获取可用优惠券列表（用于下单时选择）
  async fetchAvailableCoupons({ commit }, params) {
    commit('SET_COUPON_LOADING', true)
    try {
      const res = await couponApi.getAvailableCoupons(params)
      if (res.success || res.code === 200) {
        commit('SET_AVAILABLE_COUPONS', res.data || [])
        return { success: true, data: res.data }
      } else {
        throw new Error(res.message || '获取可用优惠券失败')
      }
    } catch (error) {
      console.error('获取可用优惠券失败:', error)
      throw error
    } finally {
      commit('SET_COUPON_LOADING', false)
    }
  },
  
  // 选择优惠券
  selectCoupon({ commit }, coupon) {
    commit('SET_SELECTED_COUPON', coupon)
  },
  
  // 清除选中的优惠券
  clearSelectedCoupon({ commit }) {
    commit('CLEAR_SELECTED_COUPON')
  },
  
  // 领取优惠券
  async receiveCoupon({ dispatch }, couponId) {
    try {
      const res = await couponApi.receiveCoupon(couponId)
      if (res.success || res.code === 200) {
        uni.showToast({
          title: '领取成功',
          icon: 'success'
        })
        // 刷新优惠券列表
        dispatch('fetchCouponList')
        return { success: true }
      } else {
        throw new Error(res.message || '领取优惠券失败')
      }
    } catch (error) {
      console.error('领取优惠券失败:', error)
      uni.showToast({
        title: error.message || '领取失败',
        icon: 'none'
      })
      throw error
    }
  },
  
  // 使用优惠券
  async useCoupon({ commit }, { couponId, orderId }) {
    try {
      const res = await couponApi.useCoupon(couponId, orderId)
      if (res.success || res.code === 200) {
        uni.showToast({
          title: '使用成功',
          icon: 'success'
        })
        // 清除选中的优惠券
        commit('CLEAR_SELECTED_COUPON')
        return { success: true }
      } else {
        throw new Error(res.message || '使用优惠券失败')
      }
    } catch (error) {
      console.error('使用优惠券失败:', error)
      uni.showToast({
        title: error.message || '使用失败',
        icon: 'none'
      })
      throw error
    }
  }
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}